package com.zzgele.qmzb.api.utils;

import com.alibaba.fastjson.JSON;
import com.zzgele.qmzb.api.core.Constants;
import org.apache.http.Consts;
import org.apache.http.entity.StringEntity;
import org.netease.im.NIMPost;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import java.io.IOException;
import java.util.HashMap;

/**
 * Created by Martin on 2017-07-09.
 */
@SuppressWarnings("unchecked")
public class NeteaseLiveUtil {
    private final static Logger logger = LoggerFactory.getLogger(NeteaseLiveUtil.class);
    private static String BaseUrl = "https://vcloud.163.com/app/";

    /**
     * 统一封装网易IM post
     * @param url
     * @param params
     * @return
     */
    public static String post(String url, HashMap params) {
        try {
            //logger.info(params.toString());
            String paramsStr = JSON.toJSONString(params);
            logger.debug("params: {}", paramsStr);

            //UTF-8编码,解决中文问题
            //HttpEntity entity = new UrlEncodedFormEntity(params, "UTF-8");
            StringEntity entity = new StringEntity(paramsStr, Consts.UTF_8);

            String res = NIMPost.postNIMServer(url, entity, Constants.NETEASE_APPKEY, Constants.NETEASE_SECRET, true);
            logger.debug("{} : {}", url, res);

            if(StringUtil.isEmpty(res)) {
                logger.warn("{} : {}", url, res);
            }

            return res;
        } catch (IOException e) {
            return "";
        }
    }
    public static String setcallback() {
        String url = BaseUrl + "chstatus/setcallback";
        HashMap params = new HashMap();

        params.put("chStatusClk", "http://139.199.23.160:8080/qmzb/public/health"); 

        return post(url, params);
    }
    /**
     * 创建频道
     * @param name /频道名称（最大长度64个字符，只支持中文、字母、数字和下划线）
     * @return
     */
    public static String channelCreate(String name) {
        String url = BaseUrl + "channel/create";
        HashMap params = new HashMap();

        params.put("name", name); //频道名称（最大长度64个字符，只支持中文、字母、数字和下划线）
        params.put("type", 0); //频道类型（0:rtmp）

        return post(url, params);
    }

    /**
     * 更新频道
     * @param name 频道名称（最大长度64个字符，只支持中文、字母、数字和下划线）
     * @param cid 频道ID，32位字符串
     * @return
     */
    public static String channelUpdate(String name, String cid) {
        String url = BaseUrl + "channel/update";
        HashMap params = new HashMap();

        params.put("name", name);
        params.put("cid", cid);
        params.put("type", 0); //频道类型（0:rtmp）

        return post(url, params);
    }

    /**
     * 删除频道
     * @param cid 频道ID，32位字符串
     * @return
     */
    public static String channelDelete(String cid) {
        String url = BaseUrl + "channel/delete";
        HashMap params = new HashMap();

        params.put("cid", cid);

        return post(url, params);
    }

    /**
     * 获取频道信息
     * @param cid 频道ID，32位字符串
     * @return
     */
    public static String channelStats(String cid) {
        String url = BaseUrl + "app/channelstats";
        HashMap params = new HashMap();

        params.put("cid", cid);

        return post(url, params);
    }

    /**
     * 获取频道列表
     * @param records 可选，单页记录数，默认值为10
     * @param pnum 可选，要取第几页，默认值为1
     * @param ofield 可选，排序的域，支持的排序域为：ctime（默认）
     * @param sort 可选，升序还是降序，1升序，0降序，默认为desc
     * @return
     */
    public static String channelList(int records, int pnum, String ofield, int sort){
        String url = BaseUrl + "channellist";
        HashMap params = new HashMap();

        params.put("records", records);
        params.put("pnum", pnum);
        params.put("ofield", ofield);
        params.put("sort", sort);

        return post(url, params);
    }

    /**
     * 获取频道列表
     * @param records 可选，单页记录数，默认值为10
     * @param pnum 可选，要取第几页，默认值为1
     * @return
     */
    public static String channelList(int records, int pnum){
        return channelList(records, pnum, "ctime", 1);
    }

    /**
     * 重新获取推流地址
     * @param cid  频道ID，32位字符串
     * @return
     */
    public static String address(String cid) {
        String url = BaseUrl + "address";
        HashMap params = new HashMap();

        params.put("cid", cid);

        return post(url, params);
    }

    /**
     * 禁用频道
     * @param cid  频道ID，32位字符串
     * @return
     */
    public static String channelPause(String cid) {
        String url = BaseUrl + "channel/pause";
        HashMap params = new HashMap();

        params.put("cid", cid);

        return post(url, params);
    }

    /**
     * 恢复频道
     * @param cid  频道ID，32位字符串
     * @return
     */
    public static String channelResume(String cid) {
        String url = BaseUrl + "channel/resume";
        HashMap params = new HashMap();

        params.put("cid", cid);

        return post(url, params);
    }

    /**
     * 设置频道为录制状态
     * @param cid 频道ID，32位字符串
     * @param needRecord 1-开启录制； 0-关闭录制
     * @param format 1-flv； 0-mp4
     * @param duration 录制切片时长(分钟)，5~120分钟
     * @return
     */
    public static String channelSetAlwaysRecord(String cid, int needRecord, String format, int duration) {
        String url = BaseUrl + "channel/setAlwaysRecord";
        HashMap params = new HashMap();

        params.put("cid", cid);
        params.put("needRecord", needRecord);
        params.put("format", format);
        params.put("duration", duration);
        params.put("filename", cid); //录制后文件名（只支持中文、字母和数字），格式为filename_YYYYMMDD-HHmmssYYYYMMDD-HHmmss, 文件名录制起始时间（年月日时分秒) -录制结束时间（年月日时分秒)

        return post(url, params);
    }
}
